'use strict';
const uniID = require('uni-id')
const uniConfigCenter = require('uni-config-center')

exports.main = async (event, context) => {
  console.log('event : ', event)
  
  // 处理HTTP请求数据
  let requestData = event;
  if (event.body) {
    let body = event.body;
    if (event.isBase64Encoded) {
      body = Buffer.from(body, 'base64').toString('utf-8');
    }
    try {
      requestData = JSON.parse(body);
    } catch (e) {
      console.error('解析请求体失败：', e);
      return {
        code: 400,
        message: '请求体格式错误'
      };
    }
  }
  
  // 获取uni-id配置
  const configCenter = uniConfigCenter({
    pluginId: 'uni-id'
  })
  
  const uniIdConfig = configCenter.config()
  
  // 检查参数
  if (!requestData.code) {
    return {
      code: 401,
      message: '缺少code参数'
    }
  }
  
  try {
    // 初始化uni-id实例
    const uniIdInstance = uniID.createInstance({
      context: context,
      clientInfo: {
        platform: 'mp-weixin',
        appId: 'wx35dcce69119cedb5'
      },
      config: {
        'mp-weixin': {
          oauth: {
            weixin: {
              appid: 'wx35dcce69119cedb5',
              appsecret: 'b964c891bf6c029f2352fc2ee93741c5'
            }
          }
        },
        passwordSecret: [
          {
            type: 'hmac-sha256',
            version: 1,
            value: 'tonightWhereToPlayPasswordSecret2023@#'
          }
        ],
        tokenSecret: 'tonightWhereToPlaySecretKey2023@#'
      }
    })
    
    // 使用微信code进行登录
    // 微信的code只能使用一次，所以我们只调用一次loginByWeixin
    // 使用auto模式：如果用户已存在则登录，不存在则自动注册并登录
    let loginRes = await uniIdInstance.loginByWeixin({
      code: requestData.code
    })
    
    // 如果遇到账号冲突错误，尝试通过其他方式解决
    // 注意：这里不再重复使用微信code，而是尝试其他解决方案
    if (loginRes.code === 10005 && loginRes.errCode === 'uni-id-user-account-conflict') {
      console.log('检测到账号冲突，尝试获取用户信息')
      // 尝试获取用户信息，但不使用微信code
      // 这里可以添加其他处理逻辑，比如通过其他方式验证用户身份
      // 目前先返回错误信息，让前端处理
      return {
        code: 10005,
        message: '账号冲突，请尝试重新登录或联系客服',
        errCode: 'uni-id-user-account-conflict'
      }
    }
    
    return {
      code: 0,
      message: '登录成功',
      openid: loginRes.openid,
      data: {
        token: loginRes.token,
        tokenExpired: loginRes.tokenExpired
      }
    }
  } catch (e) {
    console.error('登录失败：', e)
    return {
      code: 500,
      message: '登录失败：' + e.message
    }
  }
}